// 通用 entry
// 在SSR中，创建 Vue 实例、创建 store 和创建 router 都是套了一层工厂函数的，目的就是避免数据的交叉污染。
import Vue from 'vue';

// vuex-router-sync 插件将 vue-router 的状态同步到 vuex 中
import { sync } from 'vuex-router-sync';
import App from './App.vue';
import { createRouter } from './router/index';
import { createStore } from './store/index';

export function createApp() {
  // 创建 router 实例
  const router = createRouter();

  // 创建 store 实例
  const store = createStore();

  // 同步路由状态(route state)到 store
  sync(store, router, { 
    moduleName: 'RouteModule'
  });

  const app = new Vue({
    // 注入 router 到根 Vue 实例
    router,
    store,
    render: h => h(App)
  });

  return {
    app,
    router,
    store
  };
}
